home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / senjyo.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  32KB  |  829 lines

  1. /***************************************************************************
  2.  
  3. Senjyo / Star Force / Baluba-louk
  4.  
  5. driver by Mirko Buffoni
  6.  
  7. TODO:
  8. - wrong background colors in baluba, intermissions after round 13
  9.  
  10.  
  11. This board was obviously born to run Senjyo. Four scrolling layers, gradient
  12. background, sprite/background priorities, and even a small bitmap for the
  13. radar. Star Force uses only a small subset of the features.
  14.  
  15. MAIN BOARD:
  16. 0000-7fff ROM
  17. 8000-8fff RAM
  18. 9000-93ff Video RAM
  19. 9400-97ff Color RAM
  20. 9800-987f Sprites
  21. 9c00-9dff Palette RAM
  22. a000-a37f Background Video RAM #3
  23. a800-aaff Background Video RAM #2
  24. b000-b1ff Background Video RAM #1
  25. b800-bbff Radar bitmap
  26.  
  27. read:
  28. d000      IN0
  29. d001      IN1
  30. d002      IN2
  31. d003      ?
  32. d004      DSW1
  33. d005      DSW2
  34.  
  35. write:
  36. 9e20-9e21 background #1 x position
  37. 9e25      background #1 y position
  38. 9e28-9e29 background #? x position ??
  39. 9e30-9e31 background #2 & #3 x position
  40. 9e35      background #2 & #3 y position
  41. d000      flip screen
  42. d002      watchdog reset?
  43.           IN0/IN1 latch ? ( write before read IN0/IN1 )
  44. d004      sound command ( pio-a )
  45.  
  46. SOUND BOARD
  47. memory read/write
  48. 0000-3fff ROM
  49. 4000-43ff RAM
  50.  
  51. write
  52. 8000 sound chip channel 1 1st 9f,bf,df,ff
  53. 9000 sound chip channel 2 1st 9f,bf,df,ff
  54. a000 sound chip channel 3 1st 9f,bf,df,ff
  55. d000 bit 0-3 single sound volume ( freq = ctc2 )
  56. e000 ? ( initialize only )
  57. f000 ? ( initialize only )
  58.  
  59. I/O read/write
  60. 00   z80pio-A data     ( from sound command )
  61. 01   z80pio-A controll ( mode 1 input )
  62. 02   z80pio-B data     ( no use )
  63. 03   z80pio-B controll ( mode 3 bit i/o )
  64. 08   z80ctc-ch1        ( timer mode cysclk/16, bas clock 15.625KHz )
  65. 09   z80ctc-ch2        ( cascade from ctc-1  , tempo interrupt 88.778Hz )
  66. 0a   z80ctc-ch3        ( timer mode , single sound freq. )
  67. 0b   z80ctc-ch4        ( no use )
  68.  
  69. ***************************************************************************/
  70.  
  71. #include "driver.h"
  72. #include "vidhrdw/generic.h"
  73. #include "machine/z80fmly.h"
  74.  
  75.  
  76.  
  77. extern unsigned char *senjyo_fgscroll;
  78. extern unsigned char *senjyo_bgstripes;
  79. extern unsigned char *senjyo_scrollx1,*senjyo_scrolly1;
  80. extern unsigned char *senjyo_scrollx2,*senjyo_scrolly2;
  81. extern unsigned char *senjyo_scrollx3,*senjyo_scrolly3;
  82. extern unsigned char *senjyo_fgvideoram,*senjyo_fgcolorram;
  83. extern unsigned char *senjyo_bg1videoram,*senjyo_bg2videoram,*senjyo_bg3videoram;
  84. extern unsigned char *senjyo_radarram;
  85. WRITE_HANDLER( senjyo_fgvideoram_w );
  86. WRITE_HANDLER( senjyo_fgcolorram_w );
  87. WRITE_HANDLER( senjyo_bg1videoram_w );
  88. WRITE_HANDLER( senjyo_bg2videoram_w );
  89. WRITE_HANDLER( senjyo_bg3videoram_w );
  90. WRITE_HANDLER( senjyo_bgstripes_w );
  91. WRITE_HANDLER( senjyo_flipscreen_w );
  92.  
  93. void init_starforc(void);
  94. void init_starfore(void);
  95. void init_senjyo(void);
  96.  
  97. int senjyo_vh_start(void);
  98. void senjyo_vh_stop(void);
  99. void senjyo_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  100.  
  101. int senjyo_sh_start(const struct MachineSound *msound);
  102. void senjyo_sh_stop(void);
  103. void senjyo_sh_update(void);
  104.  
  105. WRITE_HANDLER( senjyo_sh_0_w );
  106. WRITE_HANDLER( senjyo_sh_1_w );
  107. WRITE_HANDLER( senjyo_sh_2_w );
  108.  
  109. WRITE_HANDLER( starforc_pio_w );
  110. READ_HANDLER( starforc_pio_r );
  111.  
  112. #if 1
  113. WRITE_HANDLER( senjyo_volume_w );
  114. #endif
  115.  
  116.  
  117.  
  118. static int int_delay_kludge;
  119.  
  120. void senjyo_init_machine(void)
  121. {
  122.     /* we must avoid generating interrupts for the first few frames otherwise */
  123.     /* Senjyo locks up. There must be an interrupt enable port somewhere, */
  124.     /* or maybe interrupts are genenrated by the CTC. */
  125.     /* Maybe a write to port d002 clears the IRQ line, but I'm not sure. */
  126.     int_delay_kludge = 10;
  127. }
  128.  
  129. int senjyo_interrupt(void)
  130. {
  131.     if (int_delay_kludge == 0) return interrupt();
  132.     else int_delay_kludge--;
  133.     return ignore_interrupt();
  134. }
  135.  
  136.  
  137.  
  138. static struct MemoryReadAddress readmem[] =
  139. {
  140.     { 0x0000, 0x7fff, MRA_ROM },
  141.     { 0x8000, 0x97ff, MRA_RAM },
  142.     { 0x9800, 0x987f, MRA_RAM },
  143.     { 0x9c00, 0x9d8f, MRA_RAM },
  144.     { 0x9e00, 0x9e3f, MRA_RAM },
  145.     { 0xa000, 0xa37f, MRA_RAM },
  146.     { 0xa800, 0xaaff, MRA_RAM },
  147.     { 0xb000, 0xb1ff, MRA_RAM },
  148.     { 0xb800, 0xbbff, MRA_RAM },
  149.     { 0xd000, 0xd000, input_port_0_r },    /* player 1 input */
  150.     { 0xd001, 0xd001, input_port_1_r },    /* player 2 input */
  151.     { 0xd002, 0xd002, input_port_2_r },    /* coin */
  152.     { 0xd004, 0xd004, input_port_3_r },    /* DSW1 */
  153.     { 0xd005, 0xd005, input_port_4_r },    /* DSW2 */
  154.     { -1 }  /* end of table */
  155. };
  156.  
  157. static struct MemoryWriteAddress writemem[] =
  158. {
  159.     { 0x0000, 0x7fff, MWA_ROM },
  160.     { 0x8000, 0x8fff, MWA_RAM },
  161.     { 0x9000, 0x93ff, senjyo_fgvideoram_w, &senjyo_fgvideoram },
  162.     { 0x9400, 0x97ff, senjyo_fgcolorram_w, &senjyo_fgcolorram },
  163.     { 0x9800, 0x987f, MWA_RAM, &spriteram, &spriteram_size },
  164.     { 0x9c00, 0x9d8f, paletteram_IIBBGGRR_w, &paletteram },
  165.     { 0x9e00, 0x9e1f, MWA_RAM, &senjyo_fgscroll },
  166.     { 0x9e20, 0x9e21, MWA_RAM, &senjyo_scrolly3 },
  167. /*    { 0x9e22, 0x9e23, height of the layer (Senjyo only, fixed at 0x380) */
  168.     { 0x9e25, 0x9e25, MWA_RAM, &senjyo_scrollx3 },
  169.     { 0x9e27, 0x9e27, senjyo_bgstripes_w, &senjyo_bgstripes },    /* controls width of background stripes */
  170.     { 0x9e28, 0x9e29, MWA_RAM, &senjyo_scrolly2 },
  171. /*    { 0x9e2a, 0x9e2b, height of the layer (Senjyo only, fixed at 0x200) */
  172.     { 0x9e2d, 0x9e2d, MWA_RAM, &senjyo_scrollx2 },
  173.     { 0x9e30, 0x9e31, MWA_RAM, &senjyo_scrolly1 },
  174. /*    { 0x9e32, 0x9e33, height of the layer (Senjyo only, fixed at 0x100) */
  175.     { 0x9e35, 0x9e35, MWA_RAM, &senjyo_scrollx1 },
  176. /*    { 0x9e38, 0x9e38, probably radar y position (Senjyo only, fixed at 0x61) */
  177. /*    { 0x9e3d, 0x9e3d, probably radar x position (Senjyo only, 0x00/0xc0 depending on screen flip) */
  178. { 0x9e00, 0x9e3f, MWA_RAM },
  179.     { 0xa000, 0xa37f, senjyo_bg3videoram_w, &senjyo_bg3videoram },
  180.     { 0xa800, 0xaaff, senjyo_bg2videoram_w, &senjyo_bg2videoram },
  181.     { 0xb000, 0xb1ff, senjyo_bg1videoram_w, &senjyo_bg1videoram },
  182.     { 0xb800, 0xbbff, MWA_RAM, &senjyo_radarram },
  183.     { 0xd000, 0xd000, senjyo_flipscreen_w },
  184.     { 0xd004, 0xd004, z80pioA_0_p_w },
  185.     { -1 }  /* end of table */
  186. };
  187.  
  188.  
  189. static struct MemoryReadAddress sound_readmem[] =
  190. {
  191.     { 0x0000, 0x3fff, MRA_ROM },
  192.     { 0x4000, 0x43ff, MRA_RAM },
  193.     { -1 }  /* end of table */
  194. };
  195.  
  196. static struct MemoryWriteAddress sound_writemem[] =
  197. {
  198.     { 0x0000, 0x3fff, MWA_ROM },
  199.     { 0x4000, 0x43ff, MWA_RAM },
  200.     { 0x8000, 0x8000, SN76496_0_w },
  201.     { 0x9000, 0x9000, SN76496_1_w },
  202.     { 0xa000, 0xa000, SN76496_2_w },
  203.     { 0xd000, 0xd000, senjyo_volume_w },
  204. #if 0
  205.     { 0xe000, 0xe000, unknown },
  206.     { 0xf000, 0xf000, unknown },
  207. #endif
  208.     { -1 }  /* end of table */
  209. };
  210.  
  211. static struct IOReadPort sound_readport[] =
  212. {
  213.     { 0x00, 0x03, z80pio_0_r },
  214.     { 0x08, 0x0b, z80ctc_0_r },
  215.     { -1 }    /* end of table */
  216. };
  217.  
  218. static struct IOWritePort sound_writeport[] =
  219. {
  220.     { 0x00, 0x03, z80pio_0_w },
  221.     { 0x08, 0x0b, z80ctc_0_w },
  222.     { -1 }    /* end of table */
  223. };
  224.  
  225.  
  226.  
  227.  
  228. INPUT_PORTS_START( senjyo )
  229.     PORT_START    /* IN0 */
  230.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  231.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY )
  232.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY )
  233.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY )
  234.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
  235.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  236.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  237.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  238.  
  239.     PORT_START    /* IN1 */
  240.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  241.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  242.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  243.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  244.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
  245.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  246.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  247.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  248.  
  249.     PORT_START    /* IN2 */
  250. /* coin input for both must be active between 2 and 9 frames to be consistently recognized */
  251.     PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_HIGH, IPT_COIN1, 2 )
  252.     PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_HIGH, IPT_COIN2, 2 )
  253.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
  254.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
  255.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  256.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  257.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  258.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  259.  
  260.     PORT_START    /* DSW0 */
  261.     PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) )
  262.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  263.     PORT_DIPSETTING(    0x01, DEF_STR( 1C_2C ) )
  264.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_3C ) )
  265.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_6C ) )
  266.     PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) )
  267.     PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
  268.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  269.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
  270.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_3C ) )
  271.     PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
  272.     PORT_DIPSETTING(    0x30, "2" )
  273.     PORT_DIPSETTING(    0x00, "3" )
  274.     PORT_DIPSETTING(    0x10, "4" )
  275.     PORT_DIPSETTING(    0x20, "5" )
  276.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
  277.     PORT_DIPSETTING(    0x40, DEF_STR( Upright ) )
  278.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  279.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
  280.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  281.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  282.  
  283.     PORT_START    /* DSW1 */
  284.     PORT_DIPNAME( 0x01, 0x01, DEF_STR( Demo_Sounds ) )
  285.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  286.     PORT_DIPSETTING(    0x01, DEF_STR( On ) )
  287.     PORT_DIPNAME( 0x02, 0x00, DEF_STR( Bonus_Life ) )
  288.     PORT_DIPSETTING(    0x00, "100000" )
  289.     PORT_DIPSETTING(    0x02, "None" )
  290.     PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
  291.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  292.     PORT_DIPSETTING(    0x04, DEF_STR( On ) )
  293.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
  294.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  295.     PORT_DIPSETTING(    0x08, DEF_STR( On ) )
  296.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
  297.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  298.     PORT_DIPSETTING(    0x10, DEF_STR( On ) )
  299.     PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
  300.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  301.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  302.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
  303.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  304.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  305.     PORT_DIPNAME( 0x80, 0x00, "Planes" )
  306.     PORT_DIPSETTING(    0x00, "Normal" )
  307.     PORT_DIPSETTING(    0x80, "Always come at you" )
  308. INPUT_PORTS_END
  309.  
  310. INPUT_PORTS_START( starforc )
  311.     PORT_START    /* IN0 */
  312.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  313.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY )
  314.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY )
  315.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY )
  316.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
  317.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  318.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  319.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  320.  
  321.     PORT_START    /* IN1 */
  322.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  323.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  324.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  325.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  326.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
  327.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  328.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  329.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  330.  
  331.     PORT_START    /* IN2 */
  332. /* coin input for both must be active between 2 and 9 frames to be consistently recognized */
  333.     PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_HIGH, IPT_COIN1, 2 )
  334.     PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_HIGH, IPT_COIN2, 2 )
  335.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
  336.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
  337.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  338.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  339.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  340.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  341.  
  342.     PORT_START    /* DSW0 */
  343.     PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) )
  344.     PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
  345.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  346.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
  347.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_3C ) )
  348.     PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) )
  349.     PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
  350.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  351.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
  352.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_3C ) )
  353.     PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
  354.     PORT_DIPSETTING(    0x30, "2" )
  355.     PORT_DIPSETTING(    0x00, "3" )
  356.     PORT_DIPSETTING(    0x10, "4" )
  357.     PORT_DIPSETTING(    0x20, "5" )
  358.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
  359.     PORT_DIPSETTING(    0x40, DEF_STR( Upright ) )
  360.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  361.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Demo_Sounds ) )
  362.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  363.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  364.  
  365.     PORT_START    /* DSW1 */
  366.     PORT_DIPNAME( 0x07, 0x00, DEF_STR( Bonus_Life ) )
  367.     PORT_DIPSETTING(    0x00, "50000 200000 500000" )
  368.     PORT_DIPSETTING(    0x01, "100000 300000 800000" )
  369.     PORT_DIPSETTING(    0x02, "50000 200000" )
  370.     PORT_DIPSETTING(    0x03, "100000 300000" )
  371.     PORT_DIPSETTING(    0x04, "50000" )
  372.     PORT_DIPSETTING(    0x05, "100000" )
  373.     PORT_DIPSETTING(    0x06, "200000" )
  374.     PORT_DIPSETTING(    0x07, "None" )
  375.     PORT_DIPNAME( 0x38, 0x00, DEF_STR( Difficulty ) )
  376.     PORT_DIPSETTING(    0x00, "Easiest" )
  377.     PORT_DIPSETTING(    0x08, "Easy" )
  378.     PORT_DIPSETTING(    0x10, "Normal" )
  379.     PORT_DIPSETTING(    0x18, "Difficult" )
  380.     PORT_DIPSETTING(    0x20, "Hard" )
  381.     PORT_DIPSETTING(    0x28, "Hardest" )
  382.     /* 0x30 and x038 are unused */
  383.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
  384.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  385.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  386.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
  387.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  388.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  389. INPUT_PORTS_END
  390.  
  391. INPUT_PORTS_START( baluba )
  392.     PORT_START    /* IN0 */
  393.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  394.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY )
  395.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY )
  396.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY )
  397.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
  398.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  399.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  400.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  401.  
  402.     PORT_START    /* IN1 */
  403.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
  404.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL )
  405.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL )
  406.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL )
  407.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
  408.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  409.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  410.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  411.  
  412.     PORT_START    /* IN2 */
  413. /* coin input for both must be active between 2 and 9 frames to be consistently recognized */
  414.     PORT_BIT_IMPULSE( 0x01, IP_ACTIVE_HIGH, IPT_COIN1, 2 )
  415.     PORT_BIT_IMPULSE( 0x02, IP_ACTIVE_HIGH, IPT_COIN2, 2 )
  416.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_START1 )
  417.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START2 )
  418.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  419.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  420.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  421.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
  422.  
  423.     PORT_START    /* DSW0 */
  424.     PORT_DIPNAME( 0x03, 0x00, DEF_STR( Coin_A ) )
  425.     PORT_DIPSETTING(    0x01, DEF_STR( 2C_1C ) )
  426.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  427.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
  428.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_3C ) )
  429.     PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Coin_B ) )
  430.     PORT_DIPSETTING(    0x04, DEF_STR( 2C_1C ) )
  431.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  432.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
  433.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_3C ) )
  434.     PORT_DIPNAME( 0x30, 0x00, DEF_STR( Lives ) )
  435.     PORT_DIPSETTING(    0x30, "2" )
  436.     PORT_DIPSETTING(    0x00, "3" )
  437.     PORT_DIPSETTING(    0x10, "4" )
  438.     PORT_DIPSETTING(    0x20, "5" )
  439.     PORT_DIPNAME( 0x40, 0x40, DEF_STR( Cabinet ) )
  440.     PORT_DIPSETTING(    0x40, DEF_STR( Upright ) )
  441.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  442.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
  443.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  444.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  445.  
  446.     PORT_START    /* DSW1 */
  447.     PORT_DIPNAME( 0x07, 0x00, DEF_STR( Bonus_Life ) )
  448.     PORT_DIPSETTING(    0x00, "30000 100000 200000" )
  449.     PORT_DIPSETTING(    0x01, "50000 200000 500000" )
  450.     PORT_DIPSETTING(    0x02, "30000 100000" )
  451.     PORT_DIPSETTING(    0x03, "50000 200000" )
  452.     PORT_DIPSETTING(    0x04, "30000" )
  453.     PORT_DIPSETTING(    0x05, "100000" )
  454.     PORT_DIPSETTING(    0x06, "200000" )
  455.     PORT_DIPSETTING(    0x07, "None" )
  456.     PORT_DIPNAME( 0x38, 0x00, DEF_STR( Difficulty ) )
  457.     PORT_DIPSETTING(    0x00, "0" )
  458.     PORT_DIPSETTING(    0x08, "1" )
  459.     PORT_DIPSETTING(    0x10, "2" )
  460.     PORT_DIPSETTING(    0x18, "3" )
  461.     PORT_DIPSETTING(    0x20, "4" )
  462.     PORT_DIPSETTING(    0x28, "5" )
  463.     PORT_DIPSETTING(    0x30, "6" )
  464.     PORT_DIPSETTING(    0x38, "7" )
  465.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
  466.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  467.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  468.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
  469.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  470.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  471. INPUT_PORTS_END
  472.  
  473.  
  474.  
  475. static struct GfxLayout charlayout =
  476. {
  477.     8,8,    /* 8*8 characters */
  478.     512,    /* 512 characters */
  479.     3,    /* 3 bits per pixel */
  480.     { 0, 512*8*8, 2*512*8*8 },    /* the bitplanes are separated */
  481.     { 0, 1, 2, 3, 4, 5, 6, 7 },
  482.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  483.     8*8    /* every char takes 8 consecutive bytes */
  484. };
  485. static struct GfxLayout tilelayout_256 =
  486. {
  487.     16,16,    /* 16*16 characters */
  488.     256,    /* 256 characters */
  489.     3,    /* 3 bits per pixel */
  490.     { 0, 256*16*16, 2*256*16*16 },    /* the bitplanes are separated */
  491.     { 0, 1, 2, 3, 4, 5, 6, 7,
  492.             8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
  493.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  494.             16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
  495.     32*8    /* every character takes 32 consecutive bytes */
  496. };
  497. static struct GfxLayout tilelayout_128 =
  498. {
  499.     16,16,    /* 16*16 characters */
  500.     128,    /* 128 characters */
  501.     3,    /* 3 bits per pixel */
  502.     { 0, 128*16*16, 2*128*16*16 },    /* the bitplanes are separated */
  503.     { 0, 1, 2, 3, 4, 5, 6, 7,
  504.             8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
  505.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  506.             16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
  507.     32*8    /* every character takes 32 consecutive bytes */
  508. };
  509. static struct GfxLayout spritelayout1 =
  510. {
  511.     16,16,    /* 16*16 sprites */
  512.     512,    /* 512 sprites */
  513.     3,    /* 3 bits per pixel */
  514.     { 0, 512*16*16, 2*512*16*16 },    /* the bitplanes are separated */
  515.     { 0, 1, 2, 3, 4, 5, 6, 7,
  516.             8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7 },
  517.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  518.             16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8 },
  519.     32*8    /* every sprite takes 32 consecutive bytes */
  520. };
  521. static struct GfxLayout spritelayout2 =
  522. {
  523.     32,32,    /* 32*32 sprites */
  524.     128,    /* 128 sprites */
  525.     3,    /* 3 bits per pixel */
  526.     { 0, 128*32*32, 2*128*32*32 },    /* the bitplanes are separated */
  527.     { 0, 1, 2, 3, 4, 5, 6, 7,
  528.             8*8+0, 8*8+1, 8*8+2, 8*8+3, 8*8+4, 8*8+5, 8*8+6, 8*8+7,
  529.             32*8+0, 32*8+1, 32*8+2, 32*8+3, 32*8+4, 32*8+5, 32*8+6, 32*8+7,
  530.             40*8+0, 40*8+1, 40*8+2, 40*8+3, 40*8+4, 40*8+5, 40*8+6, 40*8+7 },
  531.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  532.             16*8, 17*8, 18*8, 19*8, 20*8, 21*8, 22*8, 23*8,
  533.             64*8, 65*8, 66*8, 67*8, 68*8, 69*8, 70*8, 71*8,
  534.             80*8, 81*8, 82*8, 83*8, 84*8, 85*8, 86*8, 87*8 },
  535.     128*8    /* every sprite takes 128 consecutive bytes */
  536. };
  537.  
  538. static struct GfxDecodeInfo gfxdecodeinfo[] =
  539. {
  540.     { REGION_GFX1, 0, &charlayout,       0, 8 },    /*   0- 63 characters */
  541.     { REGION_GFX2, 0, &tilelayout_256,  64, 8 },    /*  64-127 background #1 */
  542.     { REGION_GFX3, 0, &tilelayout_256, 128, 8 },    /* 128-191 background #2 */
  543.     { REGION_GFX4, 0, &tilelayout_128, 192, 8 },    /* 192-255 background #3 */
  544.     { REGION_GFX5, 0, &spritelayout1,  320, 8 },    /* 320-383 normal sprites */
  545.     { REGION_GFX5, 0, &spritelayout2,  320, 8 },    /* 320-383 large sprites */
  546.                                                     /* 384-399 is background */
  547.     { -1 } /* end of array */
  548. };
  549.  
  550.  
  551.  
  552. static Z80_DaisyChain daisy_chain[] =
  553. {
  554.     { z80pio_reset , z80pio_interrupt, z80pio_reti , 0 }, /* device 0 = PIO_0 , low  priority */
  555.     { z80ctc_reset , z80ctc_interrupt, z80ctc_reti , 0 }, /* device 1 = CTC_0 , high priority */
  556.     { 0,0,0,-1}        /* end mark */
  557. };
  558.  
  559.  
  560.  
  561. static struct SN76496interface sn76496_interface =
  562. {
  563.     3,    /* 3 chips */
  564.     { 2000000, 2000000, 2000000 },    /* 2 Mhz? */
  565.     { 50, 50, 50 }
  566. };
  567.  
  568. static struct CustomSound_interface custom_interface =
  569. {
  570.     senjyo_sh_start,
  571.     senjyo_sh_stop,
  572.     senjyo_sh_update
  573. };
  574.  
  575.  
  576.  
  577. static struct MachineDriver machine_driver_senjyo =
  578. {
  579.     {
  580.         {
  581.             CPU_Z80,
  582.             4000000,    /* 4 Mhz? */
  583.             readmem,writemem,0,0,
  584.             senjyo_interrupt,1
  585.         },
  586.         {
  587.             CPU_Z80 | CPU_AUDIO_CPU,
  588.             2000000,    /* 2 Mhz? */
  589.             sound_readmem,sound_writemem,sound_readport,sound_writeport,
  590.             0,0, /* interrupts are made by z80 daisy chain system */
  591.             0,0,daisy_chain
  592.         }
  593.     },
  594.     60, DEFAULT_60HZ_VBLANK_DURATION,    /* frames per second, vblank duration */
  595.     1,    /* 1 CPU slice per frame - interleaving is forced when a sound command is written */
  596.     senjyo_init_machine,
  597.  
  598.     /* video hardware */
  599.     32*8, 32*8, { 0*8, 32*8-1, 2*8, 30*8-1 },
  600.     gfxdecodeinfo,
  601.     402, 402,
  602.     0,
  603.  
  604.     VIDEO_TYPE_RASTER | VIDEO_MODIFIES_PALETTE,
  605.     0,
  606.     senjyo_vh_start,
  607.     senjyo_vh_stop,
  608.     senjyo_vh_screenrefresh,
  609.  
  610.     /* sound hardware */
  611.     0,0,0,0,
  612.     {
  613.         {
  614.             SOUND_SN76496,
  615.             &sn76496_interface
  616.         },
  617.         {
  618.             SOUND_CUSTOM,
  619.             &custom_interface
  620.         }
  621.     }
  622. };
  623.  
  624.  
  625. /***************************************************************************
  626.  
  627.   Game driver(s)
  628.  
  629. ***************************************************************************/
  630.  
  631. ROM_START( senjyo )
  632.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  633.     ROM_LOAD( "08m_05t.bin", 0x0000, 0x2000, 0xb1f3544d )
  634.     ROM_LOAD( "08k_04t.bin", 0x2000, 0x2000, 0xe34468a8 )
  635.     ROM_LOAD( "08j_03t.bin", 0x4000, 0x2000, 0xc33aedee )
  636.     ROM_LOAD( "08f_02t.bin", 0x6000, 0x2000, 0x0ef4db9e )
  637.  
  638.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64k for sound board */
  639.     ROM_LOAD( "02h_01t.bin", 0x0000, 0x2000, 0xc1c24455 )
  640.  
  641.     ROM_REGION( 0x03000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  642.     ROM_LOAD( "08h_08b.bin", 0x00000, 0x1000, 0x0c875994 )    /* fg */
  643.     ROM_LOAD( "08f_07b.bin", 0x01000, 0x1000, 0x497bea8e )
  644.     ROM_LOAD( "08d_06b.bin", 0x02000, 0x1000, 0x4ef69b00 )
  645.  
  646.     ROM_REGION( 0x06000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  647.     ROM_LOAD( "05n_16m.bin", 0x00000, 0x1000, 0x0d3e00fb )    /* bg1 */
  648.     ROM_LOAD( "05k_15m.bin", 0x02000, 0x1000, 0x93442213 )
  649.     ROM_CONTINUE(             0x04000, 0x1000             )
  650.  
  651.     ROM_REGION( 0x06000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  652.     ROM_LOAD( "07n_18m.bin", 0x00000, 0x1000, 0xd50fced3 )    /* bg2 */
  653.     ROM_LOAD( "07k_17m.bin", 0x02000, 0x1000, 0x10c3a5f0 )
  654.     ROM_CONTINUE(             0x04000, 0x1000             )
  655.  
  656.     ROM_REGION( 0x03000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  657.     ROM_LOAD( "09n_20m.bin", 0x00000, 0x1000, 0x54cb8126 )    /* bg3 */
  658.     ROM_LOAD( "09k_19m.bin", 0x01000, 0x2000, 0x373e047c )
  659.  
  660.     ROM_REGION( 0x0c000, REGION_GFX5 | REGIONFLAG_DISPOSE )
  661.     ROM_LOAD( "08p_13b.bin", 0x00000, 0x2000, 0x40127efd )    /* sprites */
  662.     ROM_LOAD( "08s_14b.bin", 0x02000, 0x2000, 0x42648ffa )
  663.     ROM_LOAD( "08m_11b.bin", 0x04000, 0x2000, 0xccc4680b )
  664.     ROM_LOAD( "08n_12b.bin", 0x06000, 0x2000, 0x742fafed )
  665.     ROM_LOAD( "08j_09b.bin", 0x08000, 0x2000, 0x1ee63b5c )
  666.     ROM_LOAD( "08k_10b.bin", 0x0a000, 0x2000, 0xa9f41ec9 )
  667.  
  668.     ROM_REGION( 0x0020, REGION_PROMS )    /* PROMs */
  669.     ROM_LOAD( "07b.bin",    0x0000, 0x0020, 0x68db8300 )    /* unknown - timing? */
  670. ROM_END
  671.  
  672. ROM_START( starforc )
  673.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  674.     ROM_LOAD( "starforc.3",   0x0000, 0x4000, 0x8ba27691 )
  675.     ROM_LOAD( "starforc.2",   0x4000, 0x4000, 0x0fc4d2d6 )
  676.  
  677.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64k for sound board */
  678.     ROM_LOAD( "starforc.1",   0x0000, 0x2000, 0x2735bb22 )
  679.  
  680.     ROM_REGION( 0x03000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  681.     ROM_LOAD( "starforc.7",   0x00000, 0x1000, 0xf4803339 )    /* fg */
  682.     ROM_LOAD( "starforc.8",   0x01000, 0x1000, 0x96979684 )
  683.     ROM_LOAD( "starforc.9",   0x02000, 0x1000, 0xeead1d5c )
  684.  
  685.     ROM_REGION( 0x06000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  686.     ROM_LOAD( "starforc.15",  0x00000, 0x2000, 0xc3bda12f )    /* bg1 */
  687.     ROM_LOAD( "starforc.14",  0x02000, 0x2000, 0x9e9384fe )
  688.     ROM_LOAD( "starforc.13",  0x04000, 0x2000, 0x84603285 )
  689.  
  690.     ROM_REGION( 0x06000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  691.     ROM_LOAD( "starforc.12",  0x00000, 0x2000, 0xfdd9e38b )    /* bg2 */
  692.     ROM_LOAD( "starforc.11",  0x02000, 0x2000, 0x668aea14 )
  693.     ROM_LOAD( "starforc.10",  0x04000, 0x2000, 0xc62a19c1 )
  694.  
  695.     ROM_REGION( 0x03000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  696.     ROM_LOAD( "starforc.18",  0x00000, 0x1000, 0x6455c3ad )    /* bg3 */
  697.     ROM_LOAD( "starforc.17",  0x01000, 0x1000, 0x68c60d0f )
  698.     ROM_LOAD( "starforc.16",  0x02000, 0x1000, 0xce20b469 )
  699.  
  700.     ROM_REGION( 0x0c000, REGION_GFX5 | REGIONFLAG_DISPOSE )
  701.     ROM_LOAD( "starforc.6",   0x00000, 0x4000, 0x5468a21d )    /* sprites */
  702.     ROM_LOAD( "starforc.5",   0x04000, 0x4000, 0xf71717f8 )
  703.     ROM_LOAD( "starforc.4",   0x08000, 0x4000, 0xdd9d68a4 )
  704.  
  705.     ROM_REGION( 0x0020, REGION_PROMS )    /* PROMs */
  706.     ROM_LOAD( "07b.bin",    0x0000, 0x0020, 0x68db8300 )    /* unknown - timing? */
  707. ROM_END
  708.  
  709. ROM_START( starfore )
  710.     ROM_REGION( 2*0x10000, REGION_CPU1 )     /* 64k for code + 64k for decrypted opcodes */
  711.     ROM_LOAD( "starfore.005", 0x0000, 0x2000, 0x825f7ebe )
  712.     ROM_LOAD( "starfore.004", 0x2000, 0x2000, 0xfbcecb65 )
  713.     ROM_LOAD( "starfore.003", 0x4000, 0x2000, 0x9f8013b9 )
  714.     ROM_LOAD( "starfore.002", 0x6000, 0x2000, 0xf8111eba )
  715.  
  716.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64k for sound board */
  717.     ROM_LOAD( "starfore.000", 0x0000, 0x2000, 0xa277c268 )
  718.  
  719.     ROM_REGION( 0x03000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  720.     ROM_LOAD( "starforc.7",   0x00000, 0x1000, 0xf4803339 )    /* fg */
  721.     ROM_LOAD( "starforc.8",   0x01000, 0x1000, 0x96979684 )
  722.     ROM_LOAD( "starforc.9",   0x02000, 0x1000, 0xeead1d5c )
  723.  
  724.     ROM_REGION( 0x06000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  725.     ROM_LOAD( "starforc.15",  0x00000, 0x2000, 0xc3bda12f )    /* bg1 */
  726.     ROM_LOAD( "starforc.14",  0x02000, 0x2000, 0x9e9384fe )
  727.     ROM_LOAD( "starforc.13",  0x04000, 0x2000, 0x84603285 )
  728.  
  729.     ROM_REGION( 0x06000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  730.     ROM_LOAD( "starforc.12",  0x00000, 0x2000, 0xfdd9e38b )    /* bg2 */
  731.     ROM_LOAD( "starforc.11",  0x02000, 0x2000, 0x668aea14 )
  732.     ROM_LOAD( "starforc.10",  0x04000, 0x2000, 0xc62a19c1 )
  733.  
  734.     ROM_REGION( 0x03000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  735.     ROM_LOAD( "starforc.18",  0x00000, 0x1000, 0x6455c3ad )    /* bg3 */
  736.     ROM_LOAD( "starforc.17",  0x01000, 0x1000, 0x68c60d0f )
  737.     ROM_LOAD( "starforc.16",  0x02000, 0x1000, 0xce20b469 )
  738.  
  739.     ROM_REGION( 0x0c000, REGION_GFX5 | REGIONFLAG_DISPOSE )
  740.     ROM_LOAD( "starforc.6",   0x00000, 0x4000, 0x5468a21d )    /* sprites */
  741.     ROM_LOAD( "starforc.5",   0x04000, 0x4000, 0xf71717f8 )
  742.     ROM_LOAD( "starforc.4",   0x08000, 0x4000, 0xdd9d68a4 )
  743.  
  744.     ROM_REGION( 0x0020, REGION_PROMS )    /* PROMs */
  745.     ROM_LOAD( "07b.bin",    0x0000, 0x0020, 0x68db8300 )    /* unknown - timing? */
  746. ROM_END
  747.  
  748. ROM_START( megaforc )
  749.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  750.     ROM_LOAD( "mf3.bin",      0x0000, 0x4000, 0xd3ea82ec )
  751.     ROM_LOAD( "mf2.bin",      0x4000, 0x4000, 0xaa320718 )
  752.  
  753.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64k for sound board */
  754.     ROM_LOAD( "starforc.1",   0x0000, 0x2000, 0x2735bb22 )
  755.  
  756.     ROM_REGION( 0x03000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  757.     ROM_LOAD( "mf7.bin",      0x00000, 0x1000, 0x43ef8d20 )    /* fg */
  758.     ROM_LOAD( "mf8.bin",      0x01000, 0x1000, 0xc36fb746 )
  759.     ROM_LOAD( "mf9.bin",      0x02000, 0x1000, 0x62e7c9ec )
  760.  
  761.     ROM_REGION( 0x06000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  762.     ROM_LOAD( "starforc.15",  0x00000, 0x2000, 0xc3bda12f )    /* bg1 */
  763.     ROM_LOAD( "starforc.14",  0x02000, 0x2000, 0x9e9384fe )
  764.     ROM_LOAD( "starforc.13",  0x04000, 0x2000, 0x84603285 )
  765.  
  766.     ROM_REGION( 0x06000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  767.     ROM_LOAD( "starforc.12",  0x00000, 0x2000, 0xfdd9e38b )    /* bg2 */
  768.     ROM_LOAD( "starforc.11",  0x02000, 0x2000, 0x668aea14 )
  769.     ROM_LOAD( "starforc.10",  0x04000, 0x2000, 0xc62a19c1 )
  770.  
  771.     ROM_REGION( 0x03000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  772.     ROM_LOAD( "starforc.18",  0x00000, 0x1000, 0x6455c3ad )    /* bg3 */
  773.     ROM_LOAD( "starforc.17",  0x01000, 0x1000, 0x68c60d0f )
  774.     ROM_LOAD( "starforc.16",  0x02000, 0x1000, 0xce20b469 )
  775.  
  776.     ROM_REGION( 0x0c000, REGION_GFX5 | REGIONFLAG_DISPOSE )
  777.     ROM_LOAD( "starforc.6",   0x00000, 0x4000, 0x5468a21d )    /* sprites */
  778.     ROM_LOAD( "starforc.5",   0x04000, 0x4000, 0xf71717f8 )
  779.     ROM_LOAD( "starforc.4",   0x08000, 0x4000, 0xdd9d68a4 )
  780.  
  781.     ROM_REGION( 0x0020, REGION_PROMS )    /* PROMs */
  782.     ROM_LOAD( "07b.bin",    0x0000, 0x0020, 0x68db8300 )    /* unknown - timing? */
  783. ROM_END
  784.  
  785. ROM_START( baluba )
  786.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for code */
  787.     ROM_LOAD( "0",             0x0000, 0x4000, 0x0e2ebe32 )
  788.     ROM_LOAD( "1",             0x4000, 0x4000, 0xcde97076 )
  789.  
  790.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64k for sound board */
  791.     ROM_LOAD( "2",             0x0000, 0x2000, 0x441fbc64 )
  792.  
  793.     ROM_REGION( 0x03000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  794.     ROM_LOAD( "15",             0x00000, 0x1000, 0x3dda0d84 )    /* fg */
  795.     ROM_LOAD( "16",             0x01000, 0x1000, 0x3ebc79d8 )
  796.     ROM_LOAD( "17",             0x02000, 0x1000, 0xc4430deb )
  797.  
  798.     ROM_REGION( 0x06000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  799.     ROM_LOAD( "9",            0x00000, 0x2000, 0x90f88c43 )    /* bg1 */
  800.     ROM_LOAD( "10",            0x02000, 0x2000, 0xab117070 )
  801.     ROM_LOAD( "11",            0x04000, 0x2000, 0xe13b44b0 )
  802.  
  803.     ROM_REGION( 0x06000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  804.     ROM_LOAD( "12",           0x00000, 0x2000, 0xa6541c8d )    /* bg2 */
  805.     ROM_LOAD( "13",           0x02000, 0x2000, 0xafccdd18 )
  806.     ROM_LOAD( "14",           0x04000, 0x2000, 0x69542e65 )
  807.  
  808.     ROM_REGION( 0x03000, REGION_GFX4 | REGIONFLAG_DISPOSE )
  809.     ROM_LOAD( "8",            0x00000, 0x1000, 0x31e97ef9 )    /* bg3 */
  810.     ROM_LOAD( "7",            0x01000, 0x1000, 0x5915c5e2 )
  811.     ROM_LOAD( "6",            0x02000, 0x1000, 0xad6881da )
  812.  
  813.     ROM_REGION( 0x0c000, REGION_GFX5 | REGIONFLAG_DISPOSE )
  814.     ROM_LOAD( "5",            0x00000, 0x4000, 0x3b6b6e96 )    /* sprites */
  815.     ROM_LOAD( "4",            0x04000, 0x4000, 0xdd954124 )
  816.     ROM_LOAD( "3",            0x08000, 0x4000, 0x7ac24983 )
  817.  
  818.     ROM_REGION( 0x0020, REGION_PROMS )    /* PROMs */
  819.     ROM_LOAD( "07b.bin",    0x0000, 0x0020, 0x68db8300 )    /* unknown - timing? */
  820. ROM_END
  821.  
  822.  
  823.  
  824. GAME( 1983, senjyo,   0,        senjyo, senjyo,   senjyo,   ROT90, "Tehkan", "Senjyo" )
  825. GAME( 1984, starforc, 0,        senjyo, starforc, starforc, ROT90, "Tehkan", "Star Force" )
  826. GAME( 1984, starfore, starforc, senjyo, starforc, starfore, ROT90, "Tehkan", "Star Force (encrypted)" )
  827. GAME( 1985, megaforc, starforc, senjyo, starforc, starforc, ROT90, "Tehkan (Video Ware license)", "Mega Force" )
  828. GAMEX(1986, baluba,   0,        senjyo, baluba,   starforc, ROT90, "Able Corp, Ltd.", "Baluba-louk no Densetsu", GAME_IMPERFECT_COLORS )
  829.